<?php
namespace zake\foundation\able;


interface ListAble
{

    /**
     * 获取队列中所有元素
     * @return array
     *
     * @author liu.bin 2020-03-24 22:19
     */
    public function all();


    /**
     * 添加元素
     * @param int $index 索引
     * @param mixed $node 元素
     *
     * @return int
     * @author liu.bin 2020-03-24 22:08
     */
    public function add($index,$node);


    /**
     * 将元素添加到头部
     * @param mixed $node
     * @return int
     * @author liu.bin 2020-03-31 00:00
     */
    public function addFirst($node);


    /**
     * 将元素添加到尾部
     *
     * @param mixed $node
     * @return int
     * @author liu.bin 2020-03-31 00:06
     */
    public function addLast($node);



    /**
     * 获取指定元素
     * @param $index
     * @param null|mixed $default
     *
     * @return mixed
     * @author liu.bin 2020-03-30 23:58
     */
    public function get($index,$default=null);


    /**
     * 获取头部元素
     * @return mixed
     *
     * @author liu.bin 2020-03-31 00:09
     */
    public function getFirst();


    /**
     * 获取最后一个元素
     *
     * @return mixed
     * @author liu.bin 2020-03-31 00:09
     */
    public function getLast();



    /**
     * addLast别名
     * @return mixed
     *
     * @author liu.bin 2020-03-31 00:14
     */
    public function push($node);


    /**
     * 弹出第一个元素
     * @return mixed
     *
     * @author liu.bin 2020-03-30 18:54
     */
    public function pop();





    /**
     * 是否存在
     *
     * @author liu.bin 2020-03-24 22:08
     */
    public function has($node);


    /**
     * 移除
     * @param $queueContainer
     * @param $node
     * @return bool
     *
     * @author liu.bin 2020-03-24 23:03
     */
    public function remove($node);


    /**
     * 返回当前队列长度
     *
     * @return int
     *
     * @author liu.bin 2020-03-30 18:41
     */
    public function size();


    /**
     * 是否为空
     * @return bool
     *
     * @author liu.bin 2020-03-30 18:48
     */
    public function isEmpty();


    /**
     * 清空queue数据
     * @return bool
     *
     * @author liu.bin 2020-03-30 19:09
     */
    public function empty();

}
